//用栈实现后缀表达式的计算：
/*
1. 从左往右扫描下一个元素，直到处理完所有元素
2. 若扫描到操作数则压入栈，并回到 步骤1 ；否则执行 步骤3
3. 若扫描到运算符，则弹出两个栈顶元素，执行相应运算，运算结果压回栈顶，回到 步骤1
*/

#include <cstdio>
#include <ctype.h>
#include <iostream>

using namespace std;

int tToi(string t) //string t TO integer：利用了sscanf()
{
    int ans;
    sscanf(t.c_str(), "%d", &ans);  //c语言中的函数传参要用c的“字符串”(char *)
    return ans;
}

int dealWithSuffix(string s)
{
    int OS[10000]; //Operand stack:操作数栈
    int size = 0;

    string t;   //中转字符串
    bool status = true; //true：对中转字符串t 保持输入状态
                        //false：关闭输入状态

    for (int i = 0; i < s.length(); i++)
    {
        if (isdigit(s[i]))
        {
            status = true;
            t.push_back(s[i]);
        }
        else if (s[i] == '+')
        {
            status = false;
            OS[size - 2] += OS[size - 1];
            size--;
        }
        else if (s[i] == '-')
        {
            status = false;
            OS[size - 2] -= OS[size - 1];
            size--;
        }
        else if (s[i] == '*')
        {
            status = false;
            OS[size - 2] *= OS[size - 1];
            size--;
        }
        else if (s[i] == '/')
        {
            status = false;
            OS[size - 2] /= OS[size - 1];
            size--;
        }
        else if (s[i] == ' ')
        {
            if (status)
            {
                OS[size++] = tToi(t);
                t = ""; //清空中转字符串t
            }
        }
    }
    return OS[0];
}

int main()
{
    string s;
    getline(cin, s);
    cout << dealWithSuffix(s);
    return 0;
}